iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

ASP.NET MVC5從入門到退坑系列 第 9

[Day9]Scaffold產生的程式碼-Create

  • 分享至 

  • xImage
  •  

今天來了解一下Scaffold產生的Create


Controller

我們進入到Controller內可以看到有兩個Create的Action,註解上可以發現一個是GET方法一個是POST方法

// GET
        public ActionResult Create()
        {
            return View();
        }

        // POST
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

GET方法的Create
這個Create是當我們進入到Create頁面在使用的,就是一個空白的表單讓USER輸入資料
POST方法的Create
這個Create是當表單填寫完送出之後在使用的,而且只接受HTTP POST傳過來的資料
這樣的一個運作方式又可以稱為動作過濾器

View

進入到View我們可以看到跟Index一樣,由@model開頭的第一行,宣告此頁面所使用的模型

@model IEnumerable<FirstProject.Models.ModelName>

接著是MVC的表單宣告

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Guestbook</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.姓名, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.姓名, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.姓名, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.內容, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.內容, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.內容, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

@using (Html.BeginForm())
這是一個輔助方法,會輸出標籤,必須以using包覆起來,這樣當程式碼結束後系統會自動補上
所以這張表單最終會變成

<form action="/Controller/Action" method="post">
表單內容
</form>

@Html.AntiForgeryToken()
這一段是用來預防跨站攻擊(CSRF),至於跨站攻擊的原理請有興趣的鐵友Google一下
@Html.ValidationSummary()
這段是用來顯示當表單欄位驗證失敗要顯示的錯誤訊息
@Html.LabelFor()
用來顯示特定的欄位名稱
以HTML來顯示就等同於

<label for="">lable name</label>

@Html.EditorFor()
用來輸出表單欄位,如同HTML的

<input class="" type="text" value="" name=""/>

@Html.ValidationMessageFor()
顯示欄位驗證的錯誤訊息,驗證來源是依據Model上的定義


上一篇
[Day8]Scaffold產生的程式碼-Index
下一篇
[Day10]Scaffold產生的程式碼-Edit
系列文
ASP.NET MVC5從入門到退坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言